

/// Rust小知识 01
/// 补充一下println!、format!支持的格式化方式
/// rust标准库文档：https://doc.rust-lang.org/std/fmt/index.html
#[test]
fn test_format() {

    println!("{},{}", 1, 2); // 基本方式，打印实现了Display trait的类型
    println!("{:?}", "test"); // 打印实现了Debug trait的类型

    // (
    //     "1. t1",
    //     "2. t2",
    // )
    println!("{:#?}", ("1. t1", "2. t2")); // 带换行和缩进的Debug打印
    // 直接捕获上下文中的变量
    let x = 16;
    let y = 32;
    println!("({x}, {y})");//(16, 32)


    //二进制
    println!("0b{:b}", 0b11_01); // 
    println!("{:#b}", 0b11_01); // 
    //八进制
    println!("0o{:o}", 10); // 
    println!("{:#o}", 10); // 
    //十六进制小写
    println!("0x{:x}", 0xFF); //
    println!("{:#x}", 0xFF); //
    //十六进制大写
    println!("0x{:X}", 0xFF); // 十六进制(大写)
    println!("{:#X}", 0xFF); // 十六进制(大写)

    println!("{:p}", &100); // 打印内存地址
    println!("{:e}", 1000f32); // 1e3，科学计数(小写)
    println!("{:E}", 1000f64); // 1E3，科学计数(大写)
    // 使用参数索引
    println!("{0} {1} {1}", "p", "q"); //p q q
    // 使用命名参数
    println!("{a} {b} {b}", a = "1", b = "2"); //1 2 2

    
    //padding和对齐
    // 向右对齐
    // 不足左边补空格
    println!("|{:6}|", 21);//|    21|
    println!("|{:>6}|", 21);//|    21|
    // 不足左边补0
    println!("{:06}", 21);//000021
    println!("{:>06}", 21);//000021
    println!("{:0>6}", 21);//000021
    // 左边补-
    println!("{:->6}", 21);//----21

    // 居中对齐，将>换为^即可
    println!("|{:^6}|", 21);//|  21  |
    // 左对齐，补-
    println!("|{:-<6}|", 21);//|21----|

    //浮点数，保留小数点后2位
    println!("|{:7.2}|", 73.5);//|  73.50|
    println!("|{:<7.2}|", 73.5);//|73.50  |
    //除println!外，format!、
}